# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1SearchDocumentsRequest do
  @moduledoc """
  Request message for DocumentService.SearchDocuments.

  ## Attributes

  *   `documentQuery` (*type:* `GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1DocumentQuery.t`, *default:* `nil`) - Query used to search against documents (keyword, filters, etc.).
  *   `histogramQueries` (*type:* `list(GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1HistogramQuery.t)`, *default:* `nil`) - An expression specifying a histogram request against matching documents. Expression syntax is an aggregation function call with histogram facets and other options. The following aggregation functions are supported: * `count(string_histogram_facet)`: Count the number of matching entities for each distinct attribute value. Data types: * Histogram facet (aka filterable properties): Facet names with format <schema id>.<facet>. Facets will have the format of: `a-zA-Z`. If the facet is a child facet, then the parent hierarchy needs to be specified separated by dots in the prefix after the schema id. Thus, the format for a multi- level facet is: <schema id>.<parent facet name>. <child facet name>. Example: schema123.root_parent_facet.middle_facet.child_facet * DocumentSchemaId: (with no schema id prefix) to get histograms for each document type (returns the schema id path, e.g. projects/12345/locations/us-west/documentSchemas/abc123). Example expression: * Document type counts: count('DocumentSchemaId') * For schema id, abc123, get the counts for MORTGAGE_TYPE: count('abc123.MORTGAGE_TYPE')
  *   `offset` (*type:* `integer()`, *default:* `nil`) - An integer that specifies the current offset (that is, starting result location, amongst the documents deemed by the API as relevant) in search results. This field is only considered if page_token is unset. The maximum allowed value is 5000. Otherwise an error is thrown. For example, 0 means to return results starting from the first matching document, and 10 means to return from the 11th document. This can be used for pagination, (for example, pageSize = 10 and offset = 10 means to return from the second page).
  *   `orderBy` (*type:* `String.t`, *default:* `nil`) - The criteria determining how search results are sorted. For non-empty query, default is `"relevance desc"`. For empty query, default is `"upload_date desc"`. Supported options are: * `"relevance desc"`: By relevance descending, as determined by the API algorithms. * `"upload_date desc"`: By upload date descending. * `"upload_date"`: By upload date ascending. * `"update_date desc"`: By last updated date descending. * `"update_date"`: By last updated date ascending. * `"retrieval_importance desc"`: By retrieval importance of properties descending. This feature is still under development, please do not use unless otherwise instructed to do so.
  *   `pageSize` (*type:* `integer()`, *default:* `nil`) - A limit on the number of documents returned in the search results. Increasing this value above the default value of 10 can increase search response time. The value can be between 1 and 100.
  *   `pageToken` (*type:* `String.t`, *default:* `nil`) - The token specifying the current offset within search results. See SearchDocumentsResponse.next_page_token for an explanation of how to obtain the next set of query results.
  *   `qaSizeLimit` (*type:* `integer()`, *default:* `nil`) - Experimental, do not use. The limit on the number of documents returned for the question-answering feature. To enable the question-answering feature, set [DocumentQuery].is_nl_query to true.
  *   `requestMetadata` (*type:* `GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1RequestMetadata.t`, *default:* `nil`) - The meta information collected about the end user, used to enforce access control and improve the search quality of the service.
  *   `requireTotalSize` (*type:* `boolean()`, *default:* `nil`) - Controls if the search document request requires the return of a total size of matched documents. See SearchDocumentsResponse.total_size. Enabling this flag may adversely impact performance. Hint: If this is used with pagination, set this flag on the initial query but set this to false on subsequent page calls (keep the total count locally). Defaults to false.
  *   `totalResultSize` (*type:* `String.t`, *default:* `nil`) - Controls if the search document request requires the return of a total size of matched documents. See SearchDocumentsResponse.total_size.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :documentQuery =>
            GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1DocumentQuery.t()
            | nil,
          :histogramQueries =>
            list(
              GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1HistogramQuery.t()
            )
            | nil,
          :offset => integer() | nil,
          :orderBy => String.t() | nil,
          :pageSize => integer() | nil,
          :pageToken => String.t() | nil,
          :qaSizeLimit => integer() | nil,
          :requestMetadata =>
            GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1RequestMetadata.t()
            | nil,
          :requireTotalSize => boolean() | nil,
          :totalResultSize => String.t() | nil
        }

  field(:documentQuery,
    as: GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1DocumentQuery
  )

  field(:histogramQueries,
    as: GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1HistogramQuery,
    type: :list
  )

  field(:offset)
  field(:orderBy)
  field(:pageSize)
  field(:pageToken)
  field(:qaSizeLimit)

  field(:requestMetadata,
    as: GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1RequestMetadata
  )

  field(:requireTotalSize)
  field(:totalResultSize)
end

defimpl Poison.Decoder,
  for: GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1SearchDocumentsRequest do
  def decode(value, options) do
    GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1SearchDocumentsRequest.decode(
      value,
      options
    )
  end
end

defimpl Poison.Encoder,
  for: GoogleApi.ContentWarehouse.V1.Model.GoogleCloudContentwarehouseV1SearchDocumentsRequest do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
